package com.novanok.micurso.entidad;

import android.app.Activity;
import com.firebase.client.ChildEventListener;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.novanok.micurso.CursosProfesorActivity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Map;

public class Profesor implements Serializable {
    private String email;
    private String nombre;
    private String profesor_id;
    private ArrayList<Curso> misCursos;
    private Activity activity;

    public Profesor(){
        this.misCursos = new ArrayList<Curso>();
    }

    public Profesor(String nombre){
        this.misCursos = new ArrayList<Curso>();
        this.nombre = nombre;
    }

    public Profesor(String nombre, String profesor_id){
        this.misCursos = new ArrayList<Curso>();
        this.nombre = nombre;
        this.profesor_id = profesor_id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getProfesor_id() {
        return profesor_id;
    }

    public void setProfesor_id(String profesor_id) {
        this.profesor_id = profesor_id;
    }

    public ArrayList<Curso> getMisCursos() {
        return misCursos;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void cargarMisCursos(){
        Firebase rootRef = new Firebase("https://mi-curso.firebaseio.com/profesor/" + this.getProfesor_id() + "/mis_cursos");
        rootRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                Map<String, Object> newPost = (Map<String, Object>) dataSnapshot.getValue();

                Curso curso = new Curso();

                curso.setId(dataSnapshot.getKey());
                curso.setCurso_id(newPost.get("curso_id").toString());
                curso.setNombre(newPost.get("nombre").toString());
                curso.setAula(newPost.get("aula").toString());
                curso.setCatedra(newPost.get("catedra").toString());
                curso.setHorario(newPost.get("horario").toString());

                curso.profesorEscucharInscripciones();
                curso.escucharNotificaciones();

                Profesor.this.getMisCursos().add(curso);

                if (Profesor.this.activity != null && Profesor.this.activity instanceof CursosProfesorActivity){
                    ((CursosProfesorActivity)Profesor.this.activity).cargarMisCursos();
                }
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
                Curso cursoAEliminar = null;
                for (Curso c : Profesor.this.getMisCursos()){
                    if (c.getId().compareTo(dataSnapshot.getKey()) == 0){
                        cursoAEliminar = c;
                        break;
                    }
                }

                if (cursoAEliminar != null) {
                    Profesor.this.getMisCursos().remove(cursoAEliminar);
                    if (Profesor.this.activity != null && Profesor.this.activity instanceof CursosProfesorActivity) {
                        ((CursosProfesorActivity) Profesor.this.activity).cargarMisCursos();
                    }
                }
            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });
    }

    public Curso devolverCursoPorCursoId(String curso_id){
        for (Curso curso : this.getMisCursos()){
            if (curso.getCurso_id().compareTo(curso_id) == 0)
                return curso;
        }
        return null;
    }

    public void setCursoProfesorActivity(Activity activity){
        this.activity = activity;
        for (Curso curso : this.getMisCursos()){
            curso.setActivity(activity);
        }
    }
}
